home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 April: Mac OS SDK / Dev.CD Apr 99 SDK1.toast / Development Kits / Interfaces&Libraries / Universal / Interfaces / PInterfaces / QD3DMath.p < prev    next >
Encoding:
Text File  |  1998-08-17  |  23.3 KB  |  348 lines  |  [TEXT/MPS ]

  1. {
  2.      File:        QD3DMath.p
  3.  
  4.      Contains:    Math & matrix routines and definitions.                            
  5.  
  6.      Version:    Technology:    Quickdraw 3D 1.5.4
  7.                  Release:    Universal Interfaces 3.2
  8.  
  9.      Copyright:    © 1995-1998 by Apple Computer, Inc., all rights reserved.
  10.  
  11.      Bugs?:        For bug reports, consult the following page on
  12.                  the World Wide Web:
  13.  
  14.                      http://developer.apple.com/bugreporter/
  15.  
  16. }
  17. {$IFC UNDEFINED UsingIncludes}
  18. {$SETC UsingIncludes := 0}
  19. {$ENDC}
  20.  
  21. {$IFC NOT UsingIncludes}
  22.  UNIT QD3DMath;
  23.  INTERFACE
  24. {$ENDC}
  25.  
  26. {$IFC UNDEFINED __QD3DMATH__}
  27. {$SETC __QD3DMATH__ := 1}
  28.  
  29. {$I+}
  30. {$SETC QD3DMathIncludes := UsingIncludes}
  31. {$SETC UsingIncludes := 1}
  32.  
  33. {$IFC UNDEFINED __QD3D__}
  34. {$I QD3D.p}
  35. {$ENDC}
  36.  
  37.  
  38. {$PUSH}
  39. {$ALIGN POWER}
  40. {$LibExport+}
  41.  
  42. {*****************************************************************************
  43.  **                                                                             **
  44.  **                            Constant Definitions                             **
  45.  **                                                                             **
  46.  ****************************************************************************}
  47. {
  48.  *  Real zero definition
  49.  }
  50. CONST
  51.     kQ3RealZero         = 1.19209290e-07;
  52.     kQ3MaxFloat         = 3.40282347e+38;
  53. {
  54.  *  Values of PI
  55.  }
  56.     kQ3Pi                 = 3.1415926535898;
  57.     kQ32Pi                 = 2.0 * 3.1415926535898;
  58.     kQ3PiOver2            = 3.1415926535898 / 2.0;
  59.     kQ33PiOver2         = 3.0 * 3.1415926535898 / 2.0;
  60.  
  61.  
  62. {*****************************************************************************
  63.  **                                                                             **
  64.  **                            Miscellaneous Functions                             **
  65.  **                                                                             **
  66.  ****************************************************************************}
  67.  
  68. {*****************************************************************************
  69.  **                                                                             **
  70.  **                            Point and Vector Creation                         **
  71.  **                                                                             **
  72.  ****************************************************************************}
  73. FUNCTION Q3Point2D_Set(VAR point2D: TQ3Point2D; x: Single; y: Single): TQ3Point2DPtr; C;
  74. FUNCTION Q3Param2D_Set(VAR param2D: TQ3Param2D; u: Single; v: Single): TQ3Param2DPtr; C;
  75. FUNCTION Q3Point3D_Set(VAR point3D: TQ3Point3D; x: Single; y: Single; z: Single): TQ3Point3DPtr; C;
  76. FUNCTION Q3RationalPoint3D_Set(VAR point3D: TQ3RationalPoint3D; x: Single; y: Single; w: Single): TQ3RationalPoint3DPtr; C;
  77. FUNCTION Q3RationalPoint4D_Set(VAR point4D: TQ3RationalPoint4D; x: Single; y: Single; z: Single; w: Single): TQ3RationalPoint4DPtr; C;
  78. FUNCTION Q3Vector2D_Set(VAR vector2D: TQ3Vector2D; x: Single; y: Single): TQ3Vector2DPtr; C;
  79. FUNCTION Q3Vector3D_Set(VAR vector3D: TQ3Vector3D; x: Single; y: Single; z: Single): TQ3Vector3DPtr; C;
  80. FUNCTION Q3PolarPoint_Set(VAR polarPoint: TQ3PolarPoint; r: Single; theta: Single): TQ3PolarPointPtr; C;
  81. FUNCTION Q3SphericalPoint_Set(VAR sphericalPoint: TQ3SphericalPoint; rho: Single; theta: Single; phi: Single): TQ3SphericalPointPtr; C;
  82.  
  83. {*****************************************************************************
  84.  **                                                                             **
  85.  **                    Point and Vector Dimension Conversion                     **
  86.  **                                                                             **
  87.  ****************************************************************************}
  88. FUNCTION Q3Point2D_To3D({CONST}VAR point2D: TQ3Point2D; VAR result: TQ3Point3D): TQ3Point3DPtr; C;
  89. FUNCTION Q3RationalPoint3D_To2D({CONST}VAR point3D: TQ3RationalPoint3D; VAR result: TQ3Point2D): TQ3Point2DPtr; C;
  90. FUNCTION Q3Point3D_To4D({CONST}VAR point3D: TQ3Point3D; VAR result: TQ3RationalPoint4D): TQ3RationalPoint4DPtr; C;
  91. FUNCTION Q3RationalPoint4D_To3D({CONST}VAR point4D: TQ3RationalPoint4D; VAR result: TQ3Point3D): TQ3Point3DPtr; C;
  92. FUNCTION Q3Vector2D_To3D({CONST}VAR vector2D: TQ3Vector2D; VAR result: TQ3Vector3D): TQ3Vector3DPtr; C;
  93. FUNCTION Q3Vector3D_To2D({CONST}VAR vector3D: TQ3Vector3D; VAR result: TQ3Vector2D): TQ3Vector2DPtr; C;
  94.  
  95. {*****************************************************************************
  96.  **                                                                             **
  97.  **                            Point Subtraction                                 **
  98.  **                                                                             **
  99.  ****************************************************************************}
  100. FUNCTION Q3Point2D_Subtract({CONST}VAR p1: TQ3Point2D; {CONST}VAR p2: TQ3Point2D; VAR result: TQ3Vector2D): TQ3Vector2DPtr; C;
  101. FUNCTION Q3Param2D_Subtract({CONST}VAR p1: TQ3Param2D; {CONST}VAR p2: TQ3Param2D; VAR result: TQ3Vector2D): TQ3Vector2DPtr; C;
  102. FUNCTION Q3Point3D_Subtract({CONST}VAR p1: TQ3Point3D; {CONST}VAR p2: TQ3Point3D; VAR result: TQ3Vector3D): TQ3Vector3DPtr; C;
  103.  
  104. {*****************************************************************************
  105.  **                                                                             **
  106.  **                            Point Distance                                     **
  107.  **                                                                             **
  108.  ****************************************************************************}
  109. FUNCTION Q3Point2D_Distance({CONST}VAR p1: TQ3Point2D; {CONST}VAR p2: TQ3Point2D): Single; C;
  110. FUNCTION Q3Point2D_DistanceSquared({CONST}VAR p1: TQ3Point2D; {CONST}VAR p2: TQ3Point2D): Single; C;
  111.  
  112. FUNCTION Q3Param2D_Distance({CONST}VAR p1: TQ3Param2D; {CONST}VAR p2: TQ3Param2D): Single; C;
  113. FUNCTION Q3Param2D_DistanceSquared({CONST}VAR p1: TQ3Param2D; {CONST}VAR p2: TQ3Param2D): Single; C;
  114.  
  115. FUNCTION Q3RationalPoint3D_Distance({CONST}VAR p1: TQ3RationalPoint3D; {CONST}VAR p2: TQ3RationalPoint3D): Single; C;
  116. FUNCTION Q3RationalPoint3D_DistanceSquared({CONST}VAR p1: TQ3RationalPoint3D; {CONST}VAR p2: TQ3RationalPoint3D): Single; C;
  117.  
  118. FUNCTION Q3Point3D_Distance({CONST}VAR p1: TQ3Point3D; {CONST}VAR p2: TQ3Point3D): Single; C;
  119. FUNCTION Q3Point3D_DistanceSquared({CONST}VAR p1: TQ3Point3D; {CONST}VAR p2: TQ3Point3D): Single; C;
  120.  
  121. FUNCTION Q3RationalPoint4D_Distance({CONST}VAR p1: TQ3RationalPoint4D; {CONST}VAR p2: TQ3RationalPoint4D): Single; C;
  122. FUNCTION Q3RationalPoint4D_DistanceSquared({CONST}VAR p1: TQ3RationalPoint4D; {CONST}VAR p2: TQ3RationalPoint4D): Single; C;
  123.  
  124. {*****************************************************************************
  125.  **                                                                             **
  126.  **                            Point Relative Ratio                             **
  127.  **                                                                             **
  128.  ****************************************************************************}
  129. FUNCTION Q3Point2D_RRatio({CONST}VAR p1: TQ3Point2D; {CONST}VAR p2: TQ3Point2D; r1: Single; r2: Single; VAR result: TQ3Point2D): TQ3Point2DPtr; C;
  130. FUNCTION Q3Param2D_RRatio({CONST}VAR p1: TQ3Param2D; {CONST}VAR p2: TQ3Param2D; r1: Single; r2: Single; VAR result: TQ3Param2D): TQ3Param2DPtr; C;
  131. FUNCTION Q3Point3D_RRatio({CONST}VAR p1: TQ3Point3D; {CONST}VAR p2: TQ3Point3D; r1: Single; r2: Single; VAR result: TQ3Point3D): TQ3Point3DPtr; C;
  132. FUNCTION Q3RationalPoint4D_RRatio({CONST}VAR p1: TQ3RationalPoint4D; {CONST}VAR p2: TQ3RationalPoint4D; r1: Single; r2: Single; VAR result: TQ3RationalPoint4D): TQ3RationalPoint4DPtr; C;
  133.  
  134. {*****************************************************************************
  135.  **                                                                             **
  136.  **                    Point / Vector Addition    & Subtraction                     **
  137.  **                                                                             **
  138.  ****************************************************************************}
  139. FUNCTION Q3Point2D_Vector2D_Add({CONST}VAR point2D: TQ3Point2D; {CONST}VAR vector2D: TQ3Vector2D; VAR result: TQ3Point2D): TQ3Point2DPtr; C;
  140. FUNCTION Q3Param2D_Vector2D_Add({CONST}VAR param2D: TQ3Param2D; {CONST}VAR vector2D: TQ3Vector2D; VAR result: TQ3Param2D): TQ3Param2DPtr; C;
  141. FUNCTION Q3Point3D_Vector3D_Add({CONST}VAR point3D: TQ3Point3D; {CONST}VAR vector3D: TQ3Vector3D; VAR result: TQ3Point3D): TQ3Point3DPtr; C;
  142. FUNCTION Q3Point2D_Vector2D_Subtract({CONST}VAR point2D: TQ3Point2D; {CONST}VAR vector2D: TQ3Vector2D; VAR result: TQ3Point2D): TQ3Point2DPtr; C;
  143. FUNCTION Q3Param2D_Vector2D_Subtract({CONST}VAR param2D: TQ3Param2D; {CONST}VAR vector2D: TQ3Vector2D; VAR result: TQ3Param2D): TQ3Param2DPtr; C;
  144. FUNCTION Q3Point3D_Vector3D_Subtract({CONST}VAR point3D: TQ3Point3D; {CONST}VAR vector3D: TQ3Vector3D; VAR result: TQ3Point3D): TQ3Point3DPtr; C;
  145.  
  146. {*****************************************************************************
  147.  **                                                                             **
  148.  **                                Vector Scale                                 **
  149.  **                                                                             **
  150.  ****************************************************************************}
  151. FUNCTION Q3Vector2D_Scale({CONST}VAR vector2D: TQ3Vector2D; scalar: Single; VAR result: TQ3Vector2D): TQ3Vector2DPtr; C;
  152. FUNCTION Q3Vector3D_Scale({CONST}VAR vector3D: TQ3Vector3D; scalar: Single; VAR result: TQ3Vector3D): TQ3Vector3DPtr; C;
  153.  
  154. {*****************************************************************************
  155.  **                                                                             **
  156.  **                                Vector Length                                 **
  157.  **                                                                             **
  158.  ****************************************************************************}
  159. FUNCTION Q3Vector2D_Length({CONST}VAR vector2D: TQ3Vector2D): Single; C;
  160. FUNCTION Q3Vector3D_Length({CONST}VAR vector3D: TQ3Vector3D): Single; C;
  161.  
  162. {*****************************************************************************
  163.  **                                                                             **
  164.  **                                Vector Normalize                             **
  165.  **                                                                             **
  166.  ****************************************************************************}
  167. FUNCTION Q3Vector2D_Normalize({CONST}VAR vector2D: TQ3Vector2D; VAR result: TQ3Vector2D): TQ3Vector2DPtr; C;
  168. FUNCTION Q3Vector3D_Normalize({CONST}VAR vector3D: TQ3Vector3D; VAR result: TQ3Vector3D): TQ3Vector3DPtr; C;
  169.  
  170. {*****************************************************************************
  171.  **                                                                             **
  172.  **                    Vector/Vector Addition and Subtraction                     **
  173.  **                                                                             **
  174.  ****************************************************************************}
  175. FUNCTION Q3Vector2D_Add({CONST}VAR v1: TQ3Vector2D; {CONST}VAR v2: TQ3Vector2D; VAR result: TQ3Vector2D): TQ3Vector2DPtr; C;
  176. FUNCTION Q3Vector3D_Add({CONST}VAR v1: TQ3Vector3D; {CONST}VAR v2: TQ3Vector3D; VAR result: TQ3Vector3D): TQ3Vector3DPtr; C;
  177.  
  178. FUNCTION Q3Vector2D_Subtract({CONST}VAR v1: TQ3Vector2D; {CONST}VAR v2: TQ3Vector2D; VAR result: TQ3Vector2D): TQ3Vector2DPtr; C;
  179. FUNCTION Q3Vector3D_Subtract({CONST}VAR v1: TQ3Vector3D; {CONST}VAR v2: TQ3Vector3D; VAR result: TQ3Vector3D): TQ3Vector3DPtr; C;
  180.  
  181. {*****************************************************************************
  182.  **                                                                             **
  183.  **                                Cross Product                                 **
  184.  **                                                                             **
  185.  ****************************************************************************}
  186. FUNCTION Q3Vector2D_Cross({CONST}VAR v1: TQ3Vector2D; {CONST}VAR v2: TQ3Vector2D): Single; C;
  187. FUNCTION Q3Vector3D_Cross({CONST}VAR v1: TQ3Vector3D; {CONST}VAR v2: TQ3Vector3D; VAR result: TQ3Vector3D): TQ3Vector3DPtr; C;
  188. FUNCTION Q3Point3D_CrossProductTri({CONST}VAR point1: TQ3Point3D; {CONST}VAR point2: TQ3Point3D; {CONST}VAR point3: TQ3Point3D; VAR crossVector: TQ3Vector3D): TQ3Vector3DPtr; C;
  189.  
  190. {*****************************************************************************
  191.  **                                                                             **
  192.  **                                Dot Product                                     **
  193.  **                                                                             **
  194.  ****************************************************************************}
  195. FUNCTION Q3Vector2D_Dot({CONST}VAR v1: TQ3Vector2D; {CONST}VAR v2: TQ3Vector2D): Single; C;
  196. FUNCTION Q3Vector3D_Dot({CONST}VAR v1: TQ3Vector3D; {CONST}VAR v2: TQ3Vector3D): Single; C;
  197.  
  198. {*****************************************************************************
  199.  **                                                                             **
  200.  **                        Point and Vector Transformation                         **
  201.  **                                                                             **
  202.  ****************************************************************************}
  203. FUNCTION Q3Vector2D_Transform({CONST}VAR vector2D: TQ3Vector2D; {CONST}VAR matrix3x3: TQ3Matrix3x3; VAR result: TQ3Vector2D): TQ3Vector2DPtr; C;
  204. FUNCTION Q3Vector3D_Transform({CONST}VAR vector3D: TQ3Vector3D; {CONST}VAR matrix4x4: TQ3Matrix4x4; VAR result: TQ3Vector3D): TQ3Vector3DPtr; C;
  205. FUNCTION Q3Point2D_Transform({CONST}VAR point2D: TQ3Point2D; {CONST}VAR matrix3x3: TQ3Matrix3x3; VAR result: TQ3Point2D): TQ3Point2DPtr; C;
  206. FUNCTION Q3Param2D_Transform({CONST}VAR param2D: TQ3Param2D; {CONST}VAR matrix3x3: TQ3Matrix3x3; VAR result: TQ3Param2D): TQ3Param2DPtr; C;
  207. FUNCTION Q3Point3D_Transform({CONST}VAR point3D: TQ3Point3D; {CONST}VAR matrix4x4: TQ3Matrix4x4; VAR result: TQ3Point3D): TQ3Point3DPtr; C;
  208. FUNCTION Q3RationalPoint4D_Transform({CONST}VAR point4D: TQ3RationalPoint4D; {CONST}VAR matrix4x4: TQ3Matrix4x4; VAR result: TQ3RationalPoint4D): TQ3RationalPoint4DPtr; C;
  209. FUNCTION Q3Point3D_To3DTransformArray({CONST}VAR inPoint3D: TQ3Point3D; {CONST}VAR matrix: TQ3Matrix4x4; VAR outPoint3D: TQ3Point3D; numPoints: LONGINT; inStructSize: UInt32; outStructSize: UInt32): TQ3Status; C;
  210. FUNCTION Q3Point3D_To4DTransformArray({CONST}VAR inPoint3D: TQ3Point3D; {CONST}VAR matrix: TQ3Matrix4x4; VAR outPoint4D: TQ3RationalPoint4D; numPoints: LONGINT; inStructSize: UInt32; outStructSize: UInt32): TQ3Status; C;
  211. FUNCTION Q3RationalPoint4D_To4DTransformArray({CONST}VAR inPoint4D: TQ3RationalPoint4D; {CONST}VAR matrix: TQ3Matrix4x4; VAR outPoint4D: TQ3RationalPoint4D; numPoints: LONGINT; inStructSize: UInt32; outStructSize: UInt32): TQ3Status; C;
  212.  
  213. {*****************************************************************************
  214.  **                                                                             **
  215.  **                                Vector Negation                                 **
  216.  **                                                                             **
  217.  ****************************************************************************}
  218. FUNCTION Q3Vector2D_Negate({CONST}VAR vector2D: TQ3Vector2D; VAR result: TQ3Vector2D): TQ3Vector2DPtr; C;
  219. FUNCTION Q3Vector3D_Negate({CONST}VAR vector3D: TQ3Vector3D; VAR result: TQ3Vector3D): TQ3Vector3DPtr; C;
  220.  
  221. {*****************************************************************************
  222.  **                                                                             **
  223.  **                    Point conversion from cartesian to polar                 **
  224.  **                                                                             **
  225.  ****************************************************************************}
  226. FUNCTION Q3Point2D_ToPolar({CONST}VAR point2D: TQ3Point2D; VAR result: TQ3PolarPoint): TQ3PolarPointPtr; C;
  227. FUNCTION Q3PolarPoint_ToPoint2D({CONST}VAR polarPoint: TQ3PolarPoint; VAR result: TQ3Point2D): TQ3Point2DPtr; C;
  228. FUNCTION Q3Point3D_ToSpherical({CONST}VAR point3D: TQ3Point3D; VAR result: TQ3SphericalPoint): TQ3SphericalPointPtr; C;
  229. FUNCTION Q3SphericalPoint_ToPoint3D({CONST}VAR sphericalPoint: TQ3SphericalPoint; VAR result: TQ3Point3D): TQ3Point3DPtr; C;
  230.  
  231. {*****************************************************************************
  232.  **                                                                             **
  233.  **                            Point Affine Combinations                         **
  234.  **                                                                             **
  235.  ****************************************************************************}
  236. FUNCTION Q3Point2D_AffineComb({CONST}VAR points2D: TQ3Point2D; {CONST}VAR weights: Single; nPoints: UInt32; VAR result: TQ3Point2D): TQ3Point2DPtr; C;
  237. FUNCTION Q3Param2D_AffineComb({CONST}VAR params2D: TQ3Param2D; {CONST}VAR weights: Single; nPoints: UInt32; VAR result: TQ3Param2D): TQ3Param2DPtr; C;
  238. FUNCTION Q3RationalPoint3D_AffineComb({CONST}VAR points3D: TQ3RationalPoint3D; {CONST}VAR weights: Single; numPoints: UInt32; VAR result: TQ3RationalPoint3D): TQ3RationalPoint3DPtr; C;
  239. FUNCTION Q3Point3D_AffineComb({CONST}VAR points3D: TQ3Point3D; {CONST}VAR weights: Single; numPoints: UInt32; VAR result: TQ3Point3D): TQ3Point3DPtr; C;
  240. FUNCTION Q3RationalPoint4D_AffineComb({CONST}VAR points4D: TQ3RationalPoint4D; {CONST}VAR weights: Single; numPoints: UInt32; VAR result: TQ3RationalPoint4D): TQ3RationalPoint4DPtr; C;
  241.  
  242. {*****************************************************************************
  243.  **                                                                             **
  244.  **                                Matrix Functions                             **
  245.  **                                                                             **
  246.  ****************************************************************************}
  247. FUNCTION Q3Matrix3x3_Copy({CONST}VAR matrix3x3: TQ3Matrix3x3; VAR result: TQ3Matrix3x3): TQ3Matrix3x3Ptr; C;
  248. FUNCTION Q3Matrix4x4_Copy({CONST}VAR matrix4x4: TQ3Matrix4x4; VAR result: TQ3Matrix4x4): TQ3Matrix4x4Ptr; C;
  249.  
  250. FUNCTION Q3Matrix3x3_SetIdentity(VAR matrix3x3: TQ3Matrix3x3): TQ3Matrix3x3Ptr; C;
  251. FUNCTION Q3Matrix4x4_SetIdentity(VAR matrix4x4: TQ3Matrix4x4): TQ3Matrix4x4Ptr; C;
  252.  
  253. FUNCTION Q3Matrix3x3_Transpose({CONST}VAR matrix3x3: TQ3Matrix3x3; VAR result: TQ3Matrix3x3): TQ3Matrix3x3Ptr; C;
  254. FUNCTION Q3Matrix4x4_Transpose({CONST}VAR matrix4x4: TQ3Matrix4x4; VAR result: TQ3Matrix4x4): TQ3Matrix4x4Ptr; C;
  255.  
  256. FUNCTION Q3Matrix3x3_Invert({CONST}VAR matrix3x3: TQ3Matrix3x3; VAR result: TQ3Matrix3x3): TQ3Matrix3x3Ptr; C;
  257. FUNCTION Q3Matrix4x4_Invert({CONST}VAR matrix4x4: TQ3Matrix4x4; VAR result: TQ3Matrix4x4): TQ3Matrix4x4Ptr; C;
  258.  
  259. FUNCTION Q3Matrix3x3_Adjoint({CONST}VAR matrix3x3: TQ3Matrix3x3; VAR result: TQ3Matrix3x3): TQ3Matrix3x3Ptr; C;
  260.  
  261. FUNCTION Q3Matrix3x3_Multiply({CONST}VAR matrixA: TQ3Matrix3x3; {CONST}VAR matrixB: TQ3Matrix3x3; VAR result: TQ3Matrix3x3): TQ3Matrix3x3Ptr; C;
  262. FUNCTION Q3Matrix4x4_Multiply({CONST}VAR matrixA: TQ3Matrix4x4; {CONST}VAR matrixB: TQ3Matrix4x4; VAR result: TQ3Matrix4x4): TQ3Matrix4x4Ptr; C;
  263.  
  264. FUNCTION Q3Matrix3x3_SetTranslate(VAR matrix3x3: TQ3Matrix3x3; xTrans: Single; yTrans: Single): TQ3Matrix3x3Ptr; C;
  265. FUNCTION Q3Matrix3x3_SetScale(VAR matrix3x3: TQ3Matrix3x3; xScale: Single; yScale: Single): TQ3Matrix3x3Ptr; C;
  266.  
  267. FUNCTION Q3Matrix3x3_SetRotateAboutPoint(VAR matrix3x3: TQ3Matrix3x3; {CONST}VAR origin: TQ3Point2D; angle: Single): TQ3Matrix3x3Ptr; C;
  268. FUNCTION Q3Matrix4x4_SetTranslate(VAR matrix4x4: TQ3Matrix4x4; xTrans: Single; yTrans: Single; zTrans: Single): TQ3Matrix4x4Ptr; C;
  269. FUNCTION Q3Matrix4x4_SetScale(VAR matrix4x4: TQ3Matrix4x4; xScale: Single; yScale: Single; zScale: Single): TQ3Matrix4x4Ptr; C;
  270.  
  271. FUNCTION Q3Matrix4x4_SetRotateAboutPoint(VAR matrix4x4: TQ3Matrix4x4; {CONST}VAR origin: TQ3Point3D; xAngle: Single; yAngle: Single; zAngle: Single): TQ3Matrix4x4Ptr; C;
  272. FUNCTION Q3Matrix4x4_SetRotateAboutAxis(VAR matrix4x4: TQ3Matrix4x4; {CONST}VAR origin: TQ3Point3D; {CONST}VAR orientation: TQ3Vector3D; angle: Single): TQ3Matrix4x4Ptr; C;
  273. FUNCTION Q3Matrix4x4_SetRotate_X(VAR matrix4x4: TQ3Matrix4x4; angle: Single): TQ3Matrix4x4Ptr; C;
  274. FUNCTION Q3Matrix4x4_SetRotate_Y(VAR matrix4x4: TQ3Matrix4x4; angle: Single): TQ3Matrix4x4Ptr; C;
  275. FUNCTION Q3Matrix4x4_SetRotate_Z(VAR matrix4x4: TQ3Matrix4x4; angle: Single): TQ3Matrix4x4Ptr; C;
  276. FUNCTION Q3Matrix4x4_SetRotate_XYZ(VAR matrix4x4: TQ3Matrix4x4; xAngle: Single; yAngle: Single; zAngle: Single): TQ3Matrix4x4Ptr; C;
  277. FUNCTION Q3Matrix4x4_SetRotateVectorToVector(VAR matrix4x4: TQ3Matrix4x4; {CONST}VAR v1: TQ3Vector3D; {CONST}VAR v2: TQ3Vector3D): TQ3Matrix4x4Ptr; C;
  278. FUNCTION Q3Matrix4x4_SetQuaternion(VAR matrix: TQ3Matrix4x4; {CONST}VAR quaternion: TQ3Quaternion): TQ3Matrix4x4Ptr; C;
  279. FUNCTION Q3Matrix3x3_Determinant({CONST}VAR matrix3x3: TQ3Matrix3x3): Single; C;
  280. FUNCTION Q3Matrix4x4_Determinant({CONST}VAR matrix4x4: TQ3Matrix4x4): Single; C;
  281.  
  282. {*****************************************************************************
  283.  **                                                                             **
  284.  **                                Quaternion Routines                             **
  285.  **                                                                             **
  286.  ****************************************************************************}
  287. FUNCTION Q3Quaternion_Set(VAR quaternion: TQ3Quaternion; w: Single; x: Single; y: Single; z: Single): TQ3QuaternionPtr; C;
  288. FUNCTION Q3Quaternion_SetIdentity(VAR quaternion: TQ3Quaternion): TQ3QuaternionPtr; C;
  289. FUNCTION Q3Quaternion_Copy({CONST}VAR quaternion: TQ3Quaternion; VAR result: TQ3Quaternion): TQ3QuaternionPtr; C;
  290. FUNCTION Q3Quaternion_IsIdentity({CONST}VAR quaternion: TQ3Quaternion): TQ3Boolean; C;
  291. FUNCTION Q3Quaternion_Invert({CONST}VAR quaternion: TQ3Quaternion; VAR result: TQ3Quaternion): TQ3QuaternionPtr; C;
  292. FUNCTION Q3Quaternion_Normalize({CONST}VAR quaternion: TQ3Quaternion; VAR result: TQ3Quaternion): TQ3QuaternionPtr; C;
  293. FUNCTION Q3Quaternion_Dot({CONST}VAR q1: TQ3Quaternion; {CONST}VAR q2: TQ3Quaternion): Single; C;
  294. FUNCTION Q3Quaternion_Multiply({CONST}VAR q1: TQ3Quaternion; {CONST}VAR q2: TQ3Quaternion; VAR result: TQ3Quaternion): TQ3QuaternionPtr; C;
  295. FUNCTION Q3Quaternion_SetRotateAboutAxis(VAR quaternion: TQ3Quaternion; {CONST}VAR axis: TQ3Vector3D; angle: Single): TQ3QuaternionPtr; C;
  296. FUNCTION Q3Quaternion_SetRotate_XYZ(VAR quaternion: TQ3Quaternion; xAngle: Single; yAngle: Single; zAngle: Single): TQ3QuaternionPtr; C;
  297. FUNCTION Q3Quaternion_SetRotate_X(VAR quaternion: TQ3Quaternion; angle: Single): TQ3QuaternionPtr; C;
  298. FUNCTION Q3Quaternion_SetRotate_Y(VAR quaternion: TQ3Quaternion; angle: Single): TQ3QuaternionPtr; C;
  299. FUNCTION Q3Quaternion_SetRotate_Z(VAR quaternion: TQ3Quaternion; angle: Single): TQ3QuaternionPtr; C;
  300.  
  301. FUNCTION Q3Quaternion_SetMatrix(VAR quaternion: TQ3Quaternion; {CONST}VAR matrix: TQ3Matrix4x4): TQ3QuaternionPtr; C;
  302. FUNCTION Q3Quaternion_SetRotateVectorToVector(VAR quaternion: TQ3Quaternion; {CONST}VAR v1: TQ3Vector3D; {CONST}VAR v2: TQ3Vector3D): TQ3QuaternionPtr; C;
  303. FUNCTION Q3Quaternion_MatchReflection({CONST}VAR q1: TQ3Quaternion; {CONST}VAR q2: TQ3Quaternion; VAR result: TQ3Quaternion): TQ3QuaternionPtr; C;
  304. FUNCTION Q3Quaternion_InterpolateFast({CONST}VAR q1: TQ3Quaternion; {CONST}VAR q2: TQ3Quaternion; t: Single; VAR result: TQ3Quaternion): TQ3QuaternionPtr; C;
  305. FUNCTION Q3Quaternion_InterpolateLinear({CONST}VAR q1: TQ3Quaternion; {CONST}VAR q2: TQ3Quaternion; t: Single; VAR result: TQ3Quaternion): TQ3QuaternionPtr; C;
  306. FUNCTION Q3Vector3D_TransformQuaternion({CONST}VAR vector3D: TQ3Vector3D; {CONST}VAR quaternion: TQ3Quaternion; VAR result: TQ3Vector3D): TQ3Vector3DPtr; C;
  307. FUNCTION Q3Point3D_TransformQuaternion({CONST}VAR point3D: TQ3Point3D; {CONST}VAR quaternion: TQ3Quaternion; VAR result: TQ3Point3D): TQ3Point3DPtr; C;
  308.  
  309. {*****************************************************************************
  310.  **                                                                             **
  311.  **                                Volume Routines                                 **
  312.  **                                                                             **
  313.  ****************************************************************************}
  314. FUNCTION Q3BoundingBox_Copy({CONST}VAR src: TQ3BoundingBox; VAR dest: TQ3BoundingBox): TQ3BoundingBoxPtr; C;
  315. FUNCTION Q3BoundingBox_Union({CONST}VAR v1: TQ3BoundingBox; {CONST}VAR v2: TQ3BoundingBox; VAR result: TQ3BoundingBox): TQ3BoundingBoxPtr; C;
  316. FUNCTION Q3BoundingBox_Set(VAR bBox: TQ3BoundingBox; {CONST}VAR min: TQ3Point3D; {CONST}VAR max: TQ3Point3D; isEmpty: TQ3Boolean): TQ3BoundingBoxPtr; C;
  317. FUNCTION Q3BoundingBox_UnionPoint3D({CONST}VAR bBox: TQ3BoundingBox; {CONST}VAR point3D: TQ3Point3D; VAR result: TQ3BoundingBox): TQ3BoundingBoxPtr; C;
  318. FUNCTION Q3BoundingBox_UnionRationalPoint4D({CONST}VAR bBox: TQ3BoundingBox; {CONST}VAR point4D: TQ3RationalPoint4D; VAR result: TQ3BoundingBox): TQ3BoundingBoxPtr; C;
  319. FUNCTION Q3BoundingBox_SetFromPoints3D(VAR bBox: TQ3BoundingBox; {CONST}VAR points3D: TQ3Point3D; numPoints: UInt32; structSize: UInt32): TQ3BoundingBoxPtr; C;
  320. FUNCTION Q3BoundingBox_SetFromRationalPoints4D(VAR bBox: TQ3BoundingBox; {CONST}VAR points4D: TQ3RationalPoint4D; numPoints: UInt32; structSize: UInt32): TQ3BoundingBoxPtr; C;
  321.  
  322. {*****************************************************************************
  323.  **                                                                             **
  324.  **                                Sphere Routines                                 **
  325.  **                                                                             **
  326.  ****************************************************************************}
  327. FUNCTION Q3BoundingSphere_Copy({CONST}VAR src: TQ3BoundingSphere; VAR dest: TQ3BoundingSphere): TQ3BoundingSpherePtr; C;
  328. FUNCTION Q3BoundingSphere_Union({CONST}VAR s1: TQ3BoundingSphere; {CONST}VAR s2: TQ3BoundingSphere; VAR result: TQ3BoundingSphere): TQ3BoundingSpherePtr; C;
  329. FUNCTION Q3BoundingSphere_Set(VAR bSphere: TQ3BoundingSphere; {CONST}VAR origin: TQ3Point3D; radius: Single; isEmpty: TQ3Boolean): TQ3BoundingSpherePtr; C;
  330. FUNCTION Q3BoundingSphere_UnionPoint3D({CONST}VAR bSphere: TQ3BoundingSphere; {CONST}VAR point3D: TQ3Point3D; VAR result: TQ3BoundingSphere): TQ3BoundingSpherePtr; C;
  331. FUNCTION Q3BoundingSphere_UnionRationalPoint4D({CONST}VAR bSphere: TQ3BoundingSphere; {CONST}VAR point4D: TQ3RationalPoint4D; VAR result: TQ3BoundingSphere): TQ3BoundingSpherePtr; C;
  332.  
  333. FUNCTION Q3BoundingSphere_SetFromPoints3D(VAR bSphere: TQ3BoundingSphere; {CONST}VAR points3D: TQ3Point3D; numPoints: UInt32; structSize: UInt32): TQ3BoundingSpherePtr; C;
  334. FUNCTION Q3BoundingSphere_SetFromRationalPoints4D(VAR bSphere: TQ3BoundingSphere; {CONST}VAR points4D: TQ3RationalPoint4D; numPoints: UInt32; structSize: UInt32): TQ3BoundingSpherePtr; C;
  335.  
  336.  
  337.  
  338. {$ALIGN RESET}
  339. {$POP}
  340.  
  341. {$SETC UsingIncludes := QD3DMathIncludes}
  342.  
  343. {$ENDC} {__QD3DMATH__}
  344.  
  345. {$IFC NOT UsingIncludes}
  346.  END.
  347. {$ENDC}
  348.